前兩天看過了從陣列尾端進行操作的 push 跟 pop 之後,接下來兩天的主題適從陣列前端進行操作的 shift 跟 unshift。
其實,如果以功能面來說的話,今天應該先介紹 unshift ,只可以為了讓語句比較好記憶,便把兩個主題進行了對調。
接下來,我們就看一下今天的主題 shift 吧!
接下來先看 JS 有關 shift 的部分。它其實跟上一篇介紹的 pop 十分相似,一樣是縮減列長度,回傳被裁剪下來的值:
// javascript
const ary = [1, 2, 3, 4, 5]
const cutItem = ary.shift()
console.log(`回傳值:${cutItem},操作後陣列長度:${ary.length}`)
// > 回傳值:1,操作後陣列長度:4
差別在,上一篇的 pop 是從最末端進行裁減,所以不會影響索引值,而今天的 shift 是從頭進行裁減,所以一旦進行了操作,每個陣列中的元素都會被重新編號:
// javascript
// pop 操作示範
const ary = ['A', 'B', 'C', 'D', 'E']
console.log(`原始陣列編號:`)
ary.forEach((item, i) => {
    console.log(`${i}:${item}`)
})
const popItem = ary.pop()
console.log(`回傳值:${popItem},陣列長度:${ary.length}`)
console.log(`操作後陣列編號:`)
ary.forEach((item, i) => {
    console.log(`${i}:${item}`)
})
// > 原始陣列編號:
// > 0:A
// > 1:B
// > 2:C
// > 3:D
// > 4:E
// > 回傳值:E,陣列長度:4
// > 操作後陣列編號:
// > 0:A
// > 1:B
// > 2:C
// > 3:D
// shift 操作示範
const ary = ['apple', 'banana', 'orange', 'peach', 'kiwi']
console.log(`原始陣列編號:`)
ary.forEach((item, i) => {
    console.log(`${i}:${item}`)
})
const popItem = ary.shift()
console.log(`回傳值:${popItem},陣列長度:${ary.length}`)
console.log(`操作後陣列編號:`)
ary.forEach((item, i) => {
    console.log(`${i}:${item}`)
})
// > 原始陣列編號:
// > 0:apple
// > 1:banana
// > 2:orange
// > 3:peach
// > 4:kiwi
// > 回傳值:apple,陣列長度:4
// > 操作後陣列編號:
// > 0:banana
// > 1:orange
// > 2:peach
// > 3:kiwi
若是作用於空陣列上,會回傳 undefined:
// javascript
const ary = []
console.log(ary.shift())
// > undefined
接下來看 PHP 的部分。
PHP 的 array_shift() 跟 array_pop() 也十分的相似,同樣也會縮減陣列長度,回傳被裁剪下來的 value 值。
差別在,array_shift() 是從第一個開始裁剪;array_pop() 是從最末一個值開始裁減。array_shift() 會針對數字型的 key 值從零開始重新編號,文字型及其他不受影響;array_pop() 則不會影響 key 值結果。
// php
// array_pop() 操作範例
<?
    $ary = array(
        "1" => "AAAAA",
        "apple" => "BBBBB",
        "cat" => "CCCCC",
        "5" => "DDDDD",
        "10" => "EEEEE",
        "dog" => "FFFFF",
    );
    $popItem = array_pop($ary);
    echo $popItem;
    print_r($ary);
    // > FFFFF
    // > array (
    // >     [1] => AAAAA,
    // >     [apple] => BBBBB,
    // >     [cat] => CCCCC,
    // >     [5] => DDDDD,
    // >     [10] => EEEEE
    // > );
?>
// array_shift() 操作範例
<?
    $bry = array(
        "1" => "AAAAA",
        "apple" => "BBBBB",
        "cat" => "CCCCC",
        "5" => "DDDDD",
        "10" => "EEEEE",
        "dog" => "FFFFF",
    );
    $shiftItem = array_shift($bry);
    echo $shiftItem;
    print_r($bry);
    // > AAAAA
    // > array (
    // >     [apple] => BBBBB,
    // >     [cat] => CCCCC,
    // >     [0] => DDDDD,
    // >     [1] => EEEEE,
    // >     [dog] => FFFFF
    // > );
?>
如果遇到空陣列,會回傳 NULL 值:
// php
<?
    $ary = array();
    print_r(array_shift($ary));
    // > NULL (沒有回傳值)
?>
| 標題\分類 | JS | PHP | 
|---|---|---|
| 對象 | array | array | 
| 取出元素 | 最前方的一個 | 最前方的一個 | 
| 陣列長度 | 縮短 | 縮短 | 
| 回傳值 | 取出的元素內容 | 取出的元素內容的 value 值 | 
| 空陣列回傳內容 | undefined | NULL (沒有回傳值) | 
| 特性 | 索引值重新編號 | 針對數字型 key 值從零開始重新編號 | 
以上內容將會不同步發佈在 blogger 中:第 11 屆鐵人賽系列文